package com.juxing.sdk.util;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期工具类
 * @author brochen
 * @mail mongibello@163.com
 * @created 2016年2月1日
 *
 */
public class DateUtil {

	/**yyyy-MM-dd日期格式*/
	public static String DATE_DEFAULT_FORMAT = "yyyy-MM-dd";
	/**yyyyMMdd日期格式*/
	public static String DATE_FORMAT_1 = "yyyyMMdd";
	/**yyyy-MM-dd HH:mm:ss时间格式*/
	public static String TIME_DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss";
	
	/**
	 * 返回当前日期 Date
	 */
	public static Date getCurrentDate() {
		return Calendar.getInstance().getTime();
	}

	/**
	 * 返回当前日期 Timestamp
	 */
	public static Timestamp getCurrenTimestamp() {
		Timestamp timestamp = new Timestamp(System.currentTimeMillis());
		return timestamp;
	}
	
	/**
	 * 使用参数Format格式化Date成字符串
	 */
	public static String format(Date date, String pattern) {
		String returnValue = null;
		if (date != null) {
			SimpleDateFormat df = new SimpleDateFormat(pattern);
			returnValue = df.format(date);
		}
		return returnValue;
	}
	/**
	 * 使用参数Format格式化Timestamp成字符串
	 */
	public static String format(Timestamp date, String pattern) {
		String str = null;
		SimpleDateFormat df = new SimpleDateFormat(pattern);// 定义格式，不显示毫秒
		str = df.format(date);
		return str;
	}
	
	/**
	 * 使用参数Format将字符串转为Date
	 */
	public static Date parse(String strDate, String pattern) {
		SimpleDateFormat df = new SimpleDateFormat(pattern);
		try {
			return df.parse(strDate);
		} catch (ParseException e) {
			return null;
		}
	}
	
	/**
	 * 给日期的某个字段做加法
	 * @param date
	 * @param field Calendar.MONTH,Calendar.DAY_OF_MONTH等
	 * @param amount
	 * @return
	 */
	public static Date add(Date date, int field, int amount) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(field, amount);
		return cal.getTime();
	}
	/**
	 * 给日期添加amount天
	 * @param date
	 * @param amount
	 * @return
	 */
	public static Date addDay(Date date, int amount) {
		return add(date, Calendar.DAY_OF_MONTH, amount);
	}
	/**
	 * 给日期添加amount月
	 * @param date
	 * @param amount
	 * @return
	 */
	public static Date addMonth(Date date, int amount) {
		return add(date, Calendar.MONTH, amount);
	}
	/**
	 * 获取指定时间当天的最大时间
	 * @param date
	 * @return
	 */
	public static Date getMaxTimeOfTheDay(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.HOUR_OF_DAY, 23);
		cal.set(Calendar.MINUTE, 59);
		cal.set(Calendar.SECOND, 59);
		cal.set(Calendar.MILLISECOND, 999);
		return cal.getTime();
	}
}
